﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.BaseDatos;
using SIIE_ERP.Codigo;
using SIIE_ERP.View;

namespace Elysium.Demo.PuntoVenta.Transacciones
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class Tickets_Edita : UserControl, IPropiedadesNavegacion
    {
        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;
        private Int32 Id;
        private Int32 IdTerminal;
        private bool EnEfectivo;
		
        public Tickets_Edita(UsuarioActivo usuario, string Id)
        {
            InitializeComponent();
            this._sesion = usuario;
            this.Id = Int32.Parse(Id);
            CargarDatos();
            CargarPartidas();
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("Tickets.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void CargarDatos()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Tickets(_sesion.RFC, _sesion.UserName);
            var ticket = db.Get_Ticket_Por_Id(Id.ToString()).Rows[0] as DataRow;

            LabelIdTicket.Content = ticket["Id_Ticket"].ToString();
            LabelFecha.Content = ticket["Fecha_Ticket"].ToString();
            LabelEstatus.Content = SIIE_ERP.View.Mensajes.getMessage((SIIE_ERP.BaseDatos.EstatusDocs_Id)ticket["Estatus"]);

            LabelPartidas.Content = ticket["Partidas"].ToString();
            LabelSubtotal.Content = Double.Parse(ticket["Subtotal"].ToString()).ToString("C");

            LabelDescuento.Content = Double.Parse(ticket["Descuento"].ToString()).ToString("C");
            LabelImpuesto.Content = Double.Parse(ticket["Impuesto"].ToString()).ToString("C");
            LabelTotal.Content = Double.Parse(ticket["Total"].ToString()).ToString("C");

            IdTerminal = Int32.Parse(ticket["Id_Terminal"].ToString());
            EnEfectivo = bool.Parse(ticket["EsEfectivo"].ToString());

            var numReimpresiones = db.Numero_Reimpresiones_Ticket(Id.ToString());

            LabelReimpresiones.Content = numReimpresiones.ToString();

        }

        private void CargarPartidas()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Tickets(_sesion.RFC, _sesion.UserName);
            var partidas = db.Get_Partidas_Ticket_Por_Id(Id.ToString()).Rows;

            PartidasDataGrid.Items.Clear();

            foreach (DataRow p in partidas)
            {
                var Secuencia = p["Secuencia"].ToString();
                var IdArticulo = p["Id_Articulo"].ToString();
                var Cantidad = p["Cantidad"].ToString();
                var NombreCorto = p["NombreCorto"].ToString();
                var PrecioUnitario = Double.Parse(p["Precio_Unitario"].ToString()).ToString("C");
                var PorcentajeDescuento = p["Porc_Descuento"].ToString();
                var Impuesto = Double.Parse(p["Impuesto"].ToString()).ToString("C");
                var Total = Double.Parse(p["Precio_Total"].ToString()).ToString("C");
                PartidasDataGrid.Items.Add(new CPartida(Secuencia, IdArticulo, Cantidad, NombreCorto,
                                                        PrecioUnitario, PorcentajeDescuento, Impuesto, 
                                                        Total));
            }
        }

        class CPartida
        {
            public string Secuencia { get; set; }
            public string IdArticulo { get; set; }
            public string Cantidad { get; set; }
            public string NombreCorto { get; set; }
            public string PrecioUnitario { get; set; }
            public string PorcentajeDescuento { get; set; }
            public string Impuesto { get; set; }
            public string Total { get; set; }

            public CPartida(string Secuencia,
                            string IdArticulo,
                            string Cantidad,
                            string NombreCorto,
                            string PrecioUnitario,
                            string PorcentajeDescuento,
                            string Impuesto,
                            string Total)
            {
                this.Secuencia = Secuencia;
                this.IdArticulo = IdArticulo;
                this.Cantidad = Cantidad;
                this.NombreCorto = NombreCorto;
                this.PrecioUnitario = PrecioUnitario;
                this.PorcentajeDescuento = PorcentajeDescuento;
                this.Impuesto = Impuesto;
                this.Total = Total;
            }
        }

        private void Button_Reimprimir_Click(object sender, RoutedEventArgs e)
        {
            // Agrega el registro de reimpresion

            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Trans_Reimpresion(_sesion.RFC, _sesion.UserName);
            db.Insert_Reimpresion(Id.ToString(), _sesion.IdUsuario);

            // TODO: Reimprimir el ticket :P

            ////////////////////////////   Impresión del Ticket
            PrintDialog dialog = new PrintDialog();

            string s = "";
            string Encabezado = FuncionesClass.GetCabeceraTicket(_sesion.RFC, _sesion.UserName, IdTerminal) + "\nTicket No.: " + Id.ToString();
            s =  Encabezado + "\n\n" + "------------------------------" + "\n\n";

            foreach (CPartida a in PartidasDataGrid.Items)
            {
                
                int Len = a.Cantidad.ToString().Length;
                
                s += a.Cantidad.ToString();

                if (Len == 4)
                    s += " ";
                else if (Len == 3)
                    s += "  ";
                else if (Len == 2)
                    s += "   ";
                else if (Len == 1)
                    s += "    ";

                s += a.NombreCorto;

                
                for(int i = 0;  i < 13 - a.NombreCorto.Length; i++)
                {
                    s += " ";
                }
                
                s += Double.Parse(a.Total, NumberStyles.Currency).ToString("C");
                s += "\n";
            }

            s += "\n\n";

            if (EnEfectivo)
                s += "Forma de Pago: Efectivo\n";
            else
                s += "Forma de Pago: Tarjeta\n";

  
            s += "Subtotal: " + LabelSubtotal.Content.ToString() + "\n";
            s += "IVA: " + (Double.Parse(LabelTotal.Content.ToString(), NumberStyles.Currency) - Double.Parse(LabelSubtotal.Content.ToString(), NumberStyles.Currency)).ToString("C") + "\n";
            s += "Total: " + LabelTotal.Content.ToString() + "\n";
            
            var tb = new TextBlock
            {
                FontFamily= new FontFamily("Consolas"),
                Text = s
            };

            dialog.PrintVisual(tb, "");

            ////////////////////////////   FIN
            CargarDatos();

        }
    }
}
